! function(a, b) {
	"function" == typeof define && (define.amd || define.cmd) ? define(function() {
		return b(a)
	}) : b(a, !0)
}(this, function(a, b) {
	function c(b, c, d) {
		a.WeixinJSBridge ? WeixinJSBridge.invoke(b, e(c), function(a) {
			g(b, a, d)
		}) : j(b, d)
	}

	function d(b, c, d) {
		a.WeixinJSBridge ? WeixinJSBridge.on(b, function(a) {
			d && d.trigger && d.trigger(a), g(b, a, c)
		}) : d ? j(b, d) : j(b, c)
	}

	function e(a) {
		return a = a || {}, a.appId = z.appId, a.verifyAppId = z.appId, a.verifySignType = "sha1", a.verifyTimestamp = z.timestamp + "", a.verifyNonceStr = z.nonceStr, a.verifySignature = z.signature, a
	}

	function f(a) {
		return {
			timeStamp : a.timestamp + "",
			nonceStr : a.nonceStr,
			"package" : a.package,
			paySign : a.paySign,
			signType : a.signType || "SHA1"
		}
	}

	function g(a, b, c) {
		var d, e, f;
		switch(delete b.err_code,delete b.err_desc,delete b.err_detail,d=b.errMsg,d||(d=b.err_msg,delete b.err_msg,d=h(a,d,c),b.errMsg=d),c=c||{},c._complete&&(c._complete(b),delete c._complete),d=b.errMsg||"",z.debug&&!c.isInnerInvoke&&alert(JSON.stringify(b)),e=d.indexOf(":"),f=d.substring(e+1)) {
		case"ok":
			c.success && c.success(b);
			break;
		case"cancel":
			c.cancel && c.cancel(b);
			break;
		default:
			c.fail && c.fail(b)
		}
		c.complete && c.complete(b)
	}

	function h(a, b) {
		var d, e, f, g;
		if (b) {
			switch(d=b.indexOf(":"),a) {
			case o.config:
				e = "config";
				break;
			case o.openProductSpecificView:
				e = "openProductSpecificView";
				break;
			default:
				e = b.substring(0, d), e = e.replace(/_/g, " "), e = e.replace(/\b\w+\b/g, function(a) {
					return a.substring(0, 1).toUpperCase() + a.substring(1)
				}), e = e.substring(0, 1).toLowerCase() + e.substring(1), e = e.replace(/ /g, ""), -1 != e.indexOf("Wcpay") && ( e = e.replace("Wcpay", "WCPay")), f = p[e], f && ( e = f)
			}
			g = b.substring(d + 1), "confirm" == g && ( g = "ok"), "failed" == g && ( g = "fail"), -1 != g.indexOf("failed_") && ( g = g.substring(7)), -1 != g.indexOf("fail_") && ( g = g.substring(5)), g = g.replace(/_/g, " "), g = g.toLowerCase(), ("access denied" == g || "no permission to execute" == g) && ( g = "permission denied"), "config" == e && "function not exist" == g && ( g = "ok"), b = e + ":" + g
		}
		return b
	}

	function i(a) {
		var b, c, d, e;
		if (a) {
			for ( b = 0, c = a.length; c > b; ++b)
				d = a[b], e = o[d], e && (a[b] = e);
			return a
		}
	}

	function j(a, b) {
		if (z.debug && !b.isInnerInvoke) {
			var c = p[a];
			c && ( a = c), b && b._complete &&
			delete b._complete, console.log('"' + a + '",', b || "")
		}
	}

	function k() {
		if (!("6.0.2" > w || y.systemType < 0)) {
			var b = new Image;
			y.appId = z.appId, y.initTime = x.initEndTime - x.initStartTime, y.preVerifyTime = x.preVerifyEndTime - x.preVerifyStartTime, C.getNetworkType({
				isInnerInvoke : !0,
				success : function(a) {
					y.networkType = a.networkType;
					var c = "https://open.weixin.qq.com/sdk/report?v=" + y.version + "&o=" + y.isPreVerifyOk + "&s=" + y.systemType + "&c=" + y.clientVersion + "&a=" + y.appId + "&n=" + y.networkType + "&i=" + y.initTime + "&p=" + y.preVerifyTime + "&u=" + y.url;
					b.src = c
				}
			})
		}
	}

	function l() {
		return (new Date).getTime()
	}

	function m(b) {
		t && (a.WeixinJSBridge ? b() : q.addEventListener && q.addEventListener("WeixinJSBridgeReady", b, !1))
	}

	function n() {
		C.invoke || (C.invoke = function(b, c, d) {
			a.WeixinJSBridge && WeixinJSBridge.invoke(b, e(c), d)
		}, C.on = function(b, c) {
			a.WeixinJSBridge && WeixinJSBridge.on(b, c)
		})
	}

	var o, p, q, r, s, t, u, v, w, x, y, z, A, B, C;
	if (!a.jWeixin)
		return o = {
			config : "preVerifyJSAPI",
			onMenuShareTimeline : "menu:share:timeline",
			onMenuShareAppMessage : "menu:share:appmessage",
			onMenuShareQQ : "menu:share:qq",
			onMenuShareWeibo : "menu:share:weiboApp",
			onMenuShareQZone : "menu:share:QZone",
			previewImage : "imagePreview",
			getLocation : "geoLocation",
			openProductSpecificView : "openProductViewWithPid",
			addCard : "batchAddCard",
			openCard : "batchViewCard",
			chooseWXPay : "getBrandWCPayRequest"
		}, p = function() {
			var b, a = {};
			for (b in o)
			a[o[b]] = b;
			return a
		}(), q = a.document, r = q.title, s = navigator.userAgent.toLowerCase(), t = -1 != s.indexOf("micromessenger"), u = -1 != s.indexOf("android"), v = -1 != s.indexOf("iphone") || -1 != s.indexOf("ipad"), w = function() {
			var a = s.match(/micromessenger\/(\d+\.\d+\.\d+)/) || s.match(/micromessenger\/(\d+\.\d+)/);
			return a ? a[1] : ""
		}(), x = {
			initStartTime : l(),
			initEndTime : 0,
			preVerifyStartTime : 0,
			preVerifyEndTime : 0
		}, y = {
			version : 1,
			appId : "",
			initTime : 0,
			preVerifyTime : 0,
			networkType : "",
			isPreVerifyOk : 1,
			systemType : v ? 1 : u ? 2 : -1,
			clientVersion : w,
			url : encodeURIComponent(location.href)
		}, z = {}, A = {
			_completes : []
		}, B = {
			state : 0,
			res : {}
		}, m(function() {
			x.initEndTime = l()
		}), C = {
			config : function(a) {
				z = a, j("config", a);
				var b = z.check === !1 ? !1 : !0;
				m(function() {
					var a, d, e;
					if (b)
						c(o.config, {
							verifyJsApiList : i(z.jsApiList)
						}, function() {
							A._complete = function(a) {
								x.preVerifyEndTime = l(), B.state = 1, B.res = a
							}, A.success = function() {
								y.isPreVerifyOk = 0
							}, A.fail = function(a) {
								A._fail ? A._fail(a) : B.state = -1
							};
							var a = A._completes;
							return a.push(function() {
								z.debug || k()
							}), A.complete = function() {
								for (var c = 0, d = a.length; d > c; ++c)
									a[c]();
								A._completes = []
							}, A
						}()), x.preVerifyStartTime = l();
					else {
						for (B.state = 1, a = A._completes, d = 0, e = a.length; e > d; ++d)
							a[d]();
						A._completes = []
					}
				}), z.beta && n()
			},
			ready : function(a) {
				0 != B.state ? a() : (A._completes.push(a), !t && z.debug && a())
			},
			error : function(a) {
				"6.0.2" > w || (-1 == B.state ? a(B.res) : A._fail = a)
			},
			checkJsApi : function(a) {
				var b = function(a) {
					var c, d, b = a.checkResult;
					for (c in b) d = p[c], d && (b[d] = b[c],
					delete b[c]);
					return a
				};
				c("checkJsApi", {
					jsApiList : i(a.jsApiList)
				}, function() {
					return a._complete = function(a) {
						if (u) {
							var c = a.checkResult;
							c && (a.checkResult = JSON.parse(c))
						}
						a = b(a)
					}, a
				}())
			},
			onMenuShareTimeline : function(a) {
				d(o.onMenuShareTimeline, {
					complete : function() {
						c("shareTimeline", {
							title : a.title || r,
							desc : a.title || r,
							img_url : a.imgUrl || "",
							link : a.link || location.href
						}, a)
					}
				}, a)
			},
			onMenuShareAppMessage : function(a) {
				d(o.onMenuShareAppMessage, {
					complete : function() {
						c("sendAppMessage", {
							title : a.title || r,
							desc : a.desc || "",
							link : a.link || location.href,
							img_url : a.imgUrl || "",
							type : a.type || "link",
							data_url : a.dataUrl || ""
						}, a)
					}
				}, a)
			},
			onMenuShareQQ : function(a) {
				d(o.onMenuShareQQ, {
					complete : function() {
						c("shareQQ", {
							title : a.title || r,
							desc : a.desc || "",
							img_url : a.imgUrl || "",
							link : a.link || location.href
						}, a)
					}
				}, a)
			},
			onMenuShareWeibo : function(a) {
				d(o.onMenuShareWeibo, {
					complete : function() {
						c("shareWeiboApp", {
							title : a.title || r,
							desc : a.desc || "",
							img_url : a.imgUrl || "",
							link : a.link || location.href
						}, a)
					}
				}, a)
			},
			onMenuShareQZone : function(a) {
				d(o.onMenuShareQZone, {
					complete : function() {
						c("shareQZone", {
							title : a.title || r,
							desc : a.desc || "",
							img_url : a.imgUrl || "",
							link : a.link || location.href
						}, a)
					}
				}, a)
			},
			startRecord : function(a) {
				c("startRecord", {}, a)
			},
			stopRecord : function(a) {
				c("stopRecord", {}, a)
			},
			onVoiceRecordEnd : function(a) {
				d("onVoiceRecordEnd", a)
			},
			playVoice : function(a) {
				c("playVoice", {
					localId : a.localId
				}, a)
			},
			pauseVoice : function(a) {
				c("pauseVoice", {
					localId : a.localId
				}, a)
			},
			stopVoice : function(a) {
				c("stopVoice", {
					localId : a.localId
				}, a)
			},
			onVoicePlayEnd : function(a) {
				d("onVoicePlayEnd", a)
			},
			uploadVoice : function(a) {
				c("uploadVoice", {
					localId : a.localId,
					isShowProgressTips : 0 == a.isShowProgressTips ? 0 : 1
				}, a)
			},
			downloadVoice : function(a) {
				c("downloadVoice", {
					serverId : a.serverId,
					isShowProgressTips : 0 == a.isShowProgressTips ? 0 : 1
				}, a)
			},
			translateVoice : function(a) {
				c("translateVoice", {
					localId : a.localId,
					isShowProgressTips : 0 == a.isShowProgressTips ? 0 : 1
				}, a)
			},
			chooseImage : function(a) {
				c("chooseImage", {
					scene : "1|2",
					count : a.count || 9,
					sizeType : a.sizeType || ["original", "compressed"]
				}, function() {
					return a._complete = function(a) {
						if (u) {
							var b = a.localIds;
							b && (a.localIds = JSON.parse(b))
						}
					}, a
				}())
			},
			previewImage : function(a) {
				c(o.previewImage, {
					current : a.current,
					urls : a.urls
				}, a)
			},
			uploadImage : function(a) {
				c("uploadImage", {
					localId : a.localId,
					isShowProgressTips : 0 == a.isShowProgressTips ? 0 : 1
				}, a)
			},
			downloadImage : function(a) {
				c("downloadImage", {
					serverId : a.serverId,
					isShowProgressTips : 0 == a.isShowProgressTips ? 0 : 1
				}, a)
			},
			getNetworkType : function(a) {
				var b = function(a) {
					var c, d, e, b = a.errMsg;
					if (a.errMsg = "getNetworkType:ok", c = a.subtype,
						delete a.subtype, c)
						a.networkType = c;
					else
						switch(d=b.indexOf(":"),e=b.substring(d+1)) {
						case"wifi":
						case"edge":
						case"wwan":
							a.networkType = e;
							break;
						default:
							a.errMsg = "getNetworkType:fail"
						}
					return a
				};
				c("getNetworkType", {}, function() {
					return a._complete = function(a) {
						a = b(a)
					}, a
				}())
			},
			openLocation : function(a) {
				c("openLocation", {
					latitude : a.latitude,
					longitude : a.longitude,
					name : a.name || "",
					address : a.address || "",
					scale : a.scale || 28,
					infoUrl : a.infoUrl || ""
				}, a)
			},
			getLocation : function(a) {
				a = a || {}, c(o.getLocation, {
					type : a.type || "wgs84"
				}, function() {
					return a._complete = function(a) {
						delete a.type
					}, a
				}())
			},
			hideOptionMenu : function(a) {
				c("hideOptionMenu", {}, a)
			},
			showOptionMenu : function(a) {
				c("showOptionMenu", {}, a)
			},
			closeWindow : function(a) {
				a = a || {}, c("closeWindow", {
					immediate_close : a.immediateClose || 0
				}, a)
			},
			hideMenuItems : function(a) {
				c("hideMenuItems", {
					menuList : a.menuList
				}, a)
			},
			showMenuItems : function(a) {
				c("showMenuItems", {
					menuList : a.menuList
				}, a)
			},
			hideAllNonBaseMenuItem : function(a) {
				c("hideAllNonBaseMenuItem", {}, a)
			},
			showAllNonBaseMenuItem : function(a) {
				c("showAllNonBaseMenuItem", {}, a)
			},
			scanQRCode : function(a) {
				a = a || {}, c("scanQRCode", {
					needResult : a.needResult || 0,
					scanType : a.scanType || ["qrCode", "barCode"]
				}, function() {
					return a._complete = function(a) {
						var b, c;
						v && ( b = a.resultStr, b && ( c = JSON.parse(b), a.resultStr = c && c.scan_code && c.scan_code.scan_result))
					}, a
				}())
			},
			openProductSpecificView : function(a) {
				c(o.openProductSpecificView, {
					pid : a.productId,
					view_type : a.viewType || 0
				}, a)
			},
			addCard : function(a) {
				var e, f, g, h, b = a.cardList, d = [];
				for ( e = 0, f = b.length; f > e; ++e)
					g = b[e], h = {
						card_id : g.cardId,
						card_ext : g.cardExt
					}, d.push(h);
				c(o.addCard, {
					card_list : d
				}, function() {
					return a._complete = function(a) {
						var c, d, e, b = a.card_list;
						if (b) {
							for ( b = JSON.parse(b), c = 0, d = b.length; d > c; ++c)
								e = b[c], e.cardId = e.card_id, e.cardExt = e.card_ext, e.isSuccess = e.is_succ ? !0 : !1,
								delete e.card_id,
								delete e.card_ext,
								delete e.is_succ;
							a.cardList = b,
							delete a.card_list
						}
					}, a
				}())
			},
			chooseCard : function(a) {
				c("chooseCard", {
					app_id : z.appId,
					location_id : a.shopId || "",
					sign_type : a.signType || "SHA1",
					card_id : a.cardId || "",
					card_type : a.cardType || "",
					card_sign : a.cardSign,
					time_stamp : a.timestamp + "",
					nonce_str : a.nonceStr
				}, function() {
					return a._complete = function(a) {
						a.cardList = a.choose_card_info,
						delete a.choose_card_info
					}, a
				}())
			},
			openCard : function(a) {
				var e, f, g, h, b = a.cardList, d = [];
				for ( e = 0, f = b.length; f > e; ++e)
					g = b[e], h = {
						card_id : g.cardId,
						code : g.code
					}, d.push(h);
				c(o.openCard, {
					card_list : d
				}, a)
			},
			chooseWXPay : function(a) {
				c(o.chooseWXPay, f(a), a)
			}
		}, b && (a.wx = a.jWeixin = C), C
});
